#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <glob.h>
#include <string.h>

#define FILE_PATH "/usr/bin/sleep"
#define DELIMS " \t\n"

struct cmd_t {
    glob_t globcmd;
};

static void prompt (void)
{
    printf("mysh-0.1$ ");
}

static void prase (char *line , struct cmd_t *res)
{/*ls -l -a /aaa/ddd/ggg/rrr/ttyyu      -lla*/
    char * tok ;
    int i = 0;
    while(1)
    {
        tok = strsep(&line, DELIMS);
        if(tok == NULL)
            break;
        if(tok[0] == '\0')// tok[0]表示一个char字符，tok表示一个caar*字符串
            continue;
        glob(tok ,GLOB_NOCHECK|GLOB_APPEND*i , NULL ,&res->globcmd); // GLOB_NOCHECK保留原样传递，GLOB_APPEND追加模式，第一次不追加，所以第一次*0，后面都*1
        i=1;
    }
}

int main ()
{

    struct cmd_t cmd;
    char *linebuf = NULL;
    size_t sizeoflinbuf = 0;
    

    while(1)
    {
        prompt();// 打印提示
        if(getline(&linebuf, &sizeoflinbuf, stdin)<0)// 获取一行
            break;
        prase(linebuf ,&cmd);

        if(0)// 如果是内部命令
        {
            // do something
        }
        else
        {
            //fflush(NULL);
            pid_t pid ;
            pid = fork();
            if(pid < 0)
                perror("fork()");
            if(pid == 0)
            {
                execvp(cmd.globcmd.gl_pathv[0], cmd.globcmd.gl_pathv);
                perror("execvp()");
                exit(1);
            }

            wait(NULL);
        }
    }


    exit(0);    
}